package com.itheima.factory;



import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;


/*
    Bean工厂, 根据id创建类的对象
 */
public class BeanFactory {

    /**
     * @param beanId id标识
     * @return 接口实现类对象
     */
    public static Object getBean(String beanId) {
        try {
            //1. 获取解析器
            SAXReader reader = new SAXReader();
            //2. 解析XML, 获取document对象
            Document document = reader.read(BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml"));
            //3. 获取根标签
            Element rootElement = document.getRootElement();
            //4. 获取<bean>子标签
            List<Element> bean_elements = rootElement.elements("bean");
            //5. 遍历集合
            String className = null;
            for (Element element : bean_elements) {
                //5.1 获取id属性值
                String id = element.attributeValue("id");
                //5.2 判断id和传递beanId是否一致
                if (beanId.equals(id)) {
                    // 获取class属性值
                    className = element.attributeValue("class");
                }
            }
            //6. 判断className是否存在
            if (className == null) {
                System.out.println("错误");
            } else {
                //7. 使用反射创建类的对象并返回
                Class clazz = Class.forName(className);
                // 返回类的实例化对象,并返回
                return clazz.newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}
